#ifndef VL_ARGS__H_
#define VL_ARGS__H_

#include <string>

namespace VL {

/**
 * @Author: CimZzz
 * @Date: 2022-06-22 16:53:42
 * 
 * 参数包装器
 */
class VLArgs {
public:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 16:56:17
	 * 
	 * 有参构造函数
	 * @param argc 参数数量
	 * @param argv 参数值数组
	 */
	explicit VLArgs(int argc, const char ** argv);

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 18:39:45
	 * 
	 * 是否全部读完参数
	 * @return 如果已经读到末尾返回 true
	 */
	bool isEnd();

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 16:56:51
	 * 
	 * 获取下一个参数
 	 * @return 下一个参数值
	 */
	std::string nextParam();

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 16:57:30
	 * 
	 * 向前进一个参数
	 */
	void forward();

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 17:07:22
	 * 
	 * 获取全指令
	 * @return 全指令
	 */
	const std::string& getFullyCommand();

private:
	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 16:57:47
	 * 
	 * 当前参数下标
	 */
	int currentIdx;

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 16:55:30
	 * 
	 * 参数数量
	 */
	int argc;
	
	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 16:55:43
	 * 
	 * 参数值
	 */
	const char ** argv;

	/**
	 * @Author: CimZzz
	 * @Date: 2022-06-22 17:05:32
	 * 
	 * 完整命令参数
	 */
	std::string fullyCommand;
};

}

#endif // VL_ARGS__H_
